package chapter18.practice.p18_1_1;

import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
import java.util.NoSuchElementException;
import java.util.Scanner;
/**
 * 文件过滤器:
 * 检查首个命令行参数是否存在文件中,如果存在,则接受该文件
 * @author 黄传伟  2018年6月24日
 *
 */
public class DirList_1 {
	public static void main(final String[] args) {
		String pathStr = ".";
		if(args.length > 0) {
			pathStr = args[0];
		}
		File path = new File(pathStr);
		String[] list;
		if (args.length < 2) {
			// 获取路径下的所有文件/目录列表
			list = path.list();
		} else {
			list = path.list(new FilenameFilter() {
				/**
				 * 如果name不是文件,不接受
				 * name中没有args[0],不接受
				 * @param dir
				 * @param name
				 * @return
				 */
				@Override
				public boolean accept(File dir, String name) {
					/**
					 * 此处不可写成 File f = new File(name);
					 * 这样f.isFile()将永远显示为false
					 * java会将子文件作为根文件.
					 */
					File f = new File( dir.getAbsolutePath(), name);
					if(!f.isFile())
						return false;
					Scanner sc = null;
					try {
					sc = new Scanner(f);
						while(true) {
							String str = sc.nextLine();
							System.out.println(str);
							if(str.contains(args[1]))
								return true;
						}
					}catch (NoSuchElementException e) {
						return false;
					}catch (Exception e) {
						e.printStackTrace();
						return false;
					}finally {
						if(sc != null)
							sc.close();
					}

				}
			});
		}
		// 按忽略大小写的字符自然顺序排序
		Arrays.sort(list, String.CASE_INSENSITIVE_ORDER);
		for (String dirItem :list) {
			System.out.println(dirItem);
		}
		System.out.println("=========");

	}
}
